home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / smaltalk / manchest.lha / MANCHESTER / manchester / 4.1 / EmphasisedPopUpMenu.st < prev    next >
Text File  |  1993-07-24  |  3KB  |  100 lines

  1. "    NAME        EmphasisedPopUpMenu
  2.     AUTHOR        Bernard Horan <bernard@is.morgan.com>
  3.     CONTRIBUTOR    Bernard Horan <bernard@is.morgan.com>
  4.     FUNCTION A popUpMenu which allows the programmer to add emphasis to each item
  5.     ST-VERSIONS    4.1
  6.     PREREQUISITES     
  7.     CONFLICTS     
  8.     DISTRIBUTION    global
  9.     VERSION        2.0
  10.     DATE        September 1991
  11.     SUMMARY        In R2.5 there is a class PopUpTextMenu.  This
  12. class offers the same functionality (but with less code).  BH,
  13. 25/9/91"!
  14.  
  15. 'From Objectworks\Smalltalk(R), Release 4.1 of 15 April 1992 on 2 September 1992 at 4:26:02 am'!
  16.  
  17. PopUpMenu subclass: #EmphasisedPopUpMenu
  18.     instanceVariableNames: 'fontKeys '
  19.     classVariableNames: ''
  20.     poolDictionaries: ''
  21.     category: 'Interface-Menus'!
  22. EmphasisedPopUpMenu comment:
  23. 'EmphasisedPopUpMenu is a refinement of PopUpMenu that allows the various labels to be rendered in different fonts.  This is accomplished by using the instance variable fontKeys as a holdef for an array of emphases.  This was adapted from the class PopUpTextMenu in release 2.5.
  24.  
  25. (c) Bernard Horan, 2 September 1992'!
  26.  
  27.  
  28. !EmphasisedPopUpMenu methodsFor: 'font accessing'!
  29.  
  30. emphasisArray: anArray
  31.     "Set the emphases of all items to the fonts specified (by emphasis number) in anArray"
  32.  
  33.     anArray size = labels size
  34.         ifFalse:    [^self error: 'Emphasis list/menu size mismatch'].
  35.      fontKeys := anArray.!
  36.  
  37. emphasize: emphasis at: index 
  38.     "Set the emphases of the item at index to the font specified by emphasis"
  39.  
  40.     (self fontKeys isKindOf: Collection)
  41.         ifFalse: [fontKeys := Array new: labels size].
  42.     index > self fontKeys size
  43.         ifTrue: [^self error: 'emphasis at incorrect index']
  44.         ifFalse: [self fontKeys at: index put: emphasis]!
  45.  
  46. fontKeys
  47.     ^ fontKeys! !
  48.  
  49. !EmphasisedPopUpMenu methodsFor: 'private'!
  50.  
  51. labelString
  52.     ^labels asStringWithCharacter: Character cr!
  53.  
  54. visualLabels
  55.     "Answer a ComposedText used to display the receiver."
  56.  
  57.     |   textArray |
  58.     textArray := OrderedCollection new.
  59.     labels with: fontKeys do: [:label :fontKey |
  60.         textArray add: (Text string: label asString
  61.                 emphasis: fontKey) ].
  62.     ^TextList new list: textArray style: self textAttributes! !
  63. "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!
  64.  
  65. EmphasisedPopUpMenu class
  66.     instanceVariableNames: ''!
  67.  
  68.  
  69. !EmphasisedPopUpMenu class methodsFor: 'instance creation'!
  70.  
  71. labels: aStringOrText emphasis: anEmphasisArray 
  72.     "Answer an instance of me whose items are in aStringOrText"
  73.  
  74.     ^self
  75.         labels: aStringOrText
  76.         lines: nil
  77.         emphasis: anEmphasisArray!
  78.  
  79. labels: aStringOrText lines: anArray emphasis: anEmphasisArray 
  80.     "Answer an instance of me whose items are in aStringOrText, with lines 
  81.     drawn 
  82.     after each item indexed by anArray"
  83.  
  84.     ^(self labels: aStringOrText lines: anArray)
  85.         emphasisArray: anEmphasisArray; yourself! !
  86.  
  87. !EmphasisedPopUpMenu class methodsFor: 'examples'!
  88.  
  89. example
  90.     "EmphasisedPopUpMenu example"
  91.  
  92.     | text menu |
  93.     text := 'abc\def\ghi' withCRs asText.
  94.     menu := self labels: text lines: #(1).
  95.     menu
  96.         emphasize: #bold at: 2;
  97.         emphasize: #italic at: 3;
  98.         startUp.! !
  99.  
  100.